import axios from 'axios'
import Qs from 'qs'
// import router from '../router'
import { Toast } from 'vant'

// 添加请求拦截器
axios.interceptors.request.use(config => {
  // 请求超时时间
  config.timeout = 10000
  config.baseURL = process.env.NODE_ENV === 'production' ? process.env.VUE_APP_URL : ''
  // 在请求发出之前进行一些操作
  let token = localStorage.getItem('token')
  if (token) {
    config.headers['Authorization'] = localStorage.getItem('token')
    // console.log("token: ",token);
  }
  // 检测如果请求为post,进行转换为json字符串
  // if (config.method === 'post') {
  //   config.data = Qs.stringify(config.data)
  // }
  Toast.loading({
    mask: true,
    loadingType: 'spinner',
    message: '加载中...'
  })
  return config
}, error => {
  // 对请求错误进行一些操作
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(response => {
  // 在这里对返回的数据进行处理
  const res = response.data
  // if (res.status === 200 || res.code === '0000') {
  //   setTimeout(function () {
  //     Toast.clear()
  //   }, 300)
  //   return res
  // } else if (res.status === 601) { // token失效跳转登录
  //   router.replace({
  //     path: '/login',
  //     query: {
  //       redirect: router.currentRoute.fullPath // 登录成功后跳入浏览的当前页面
  //     }
  //   })
  // } else {
  //   Toast.fail({
  //     message: res.message
  //   })
  //   return Promise.reject(res)
  // }
}, error => {
  // 对响应错误进行一些操作
  if (error.response.status === 404) {
    // console.log(`404请求地址出错: ${error.response.config.url}`)
  }
  return Promise.reject(error)
})

/**
 * 封装post请求
 * @param {String} url
 * @param {Object} data
 * @param {Object} config
 * @returns {Promise}
 */

export function post (url, data = {}, config = {}) {
  return new Promise((resolve, reject) => {
    axios.post(url, data, config)
      .then(response => {
        resolve(response)
      }, error => {
        reject(error)
      })
  })
}

/**
 * 封装get请求
 * @param {String} url
 * @param {Object} data
 * @param {Object} config
 * @returns {Promise}
 */

export function get (url, data = {}, config = {}) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: data,
      ...config
    }).then(response => {
      resolve(response.data)
    }, error => {
      reject(error)
    })
  })
}

/**
 * 封装PostForm请求
 * @param {String} url
 * @param {Object} data
 * @param {Object} config
 * @returns {Promise}
 */

export function httpPostForm (url, data = {}, config = {}) {
  return new Promise((resolve, reject) => {
    axios.post(url, Qs.stringify(data), config).then(response => {
      resolve(response.data)
    }, error => {
      reject(error)
    })
  })
}

/**
 * 封装Delete请求
 * @param {String} url
 * @param {Object} data
 * @param {Object} config
 * @returns {Promise}
 */

export function del (url, data = {}, config = {}) {
  return new Promise((resolve, reject) => {
    axios.delete(url, {
      params: data,
      ...config
    }).then(response => {
      resolve(response.data)
    }, error => {
      reject(error)
    })
  })
}
